05-030. Seaborn 통계 시각화
Seaborn으로 통계 시각화
Seaborn은 Python에서 통계적 데이터 시각화를 쉽게 할 수 있도록 도와주는 라이브러리다.
Matplotlib 기반으로 더 세련된 차트와 통계적 해석에 특화된 다양한 기능을 제공한다.
ℹ️알아두기: Seaborn은 데이터프레임(Pandas)과 잘 연동되며, 통계적 시각화(분포, 상관관계, 범주형 데이터 등)에 매우 강력하다.
Seaborn 기본 사용법
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋 로드
tips = sns.load_dataset('tips')
# 기본 스타일 설정
sns.set(style='whitegrid')
# 간단한 산점도
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex')
plt.title('총 금액과 팁의 관계')
plt.show()
분포 시각화
데이터 시각화에서 분포 시각화는 데이터의 특성을 보기 위해서 꼭 필요하다. 기초 통계량만으로 데이터의 분포를 머릿속에서 그리는 것은 너무 어렵다.
distplot, histplot, kdeplot
- distplot(구버전), histplot(신버전): 데이터의 분포(히스토그램)를 그린다.
- kdeplot: 커널 밀도 추정(Kernel Density Estimation, 부드러운 분포 곡선)을 그린다.
# 히스토그램 + 커널밀도
sns.histplot(tips['total_bill'], kde=True, color='skyblue')
plt.title('총 금액 분포')
plt.show()
# 커널 밀도만
sns.kdeplot(tips['tip'], fill=True, color='orange')
plt.title('팁 분포 (KDE)')
plt.show()
데이터 분포를 확인할 때는 히스토그램이 기본 시각화 방법이다. 커널 밀도 추정은 복잡한 계산 때문에 컴퓨터의 계산을 많이 필요로 하기 때문에 과거에 잘 쓰이지 않았지만 지금은 분포를 확인할 때 가장 많이 사용되는 시각화다.
boxplot, violinplot
- boxplot: 사분위수, 이상치 등 분포를 요약한다.
- violinplot: 분포의 형태까지 시각화한다.
# 성별에 따른 팁 분포
sns.boxplot(data=tips, x='sex', y='tip')
plt.title('성별에 따른 팁 분포(Boxplot)')
plt.show()
sns.violinplot(data=tips, x='day', y='total_bill', hue='sex', split=True)
plt.title('요일/성별에 따른 총 금액 분포(Violinplot)')
plt.show()
관계 시각화
scatterplot
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='smoker', style='sex')
plt.title('총 금액과 팁의 관계 (흡연/성별)')
plt.show()
pairplot
- 여러 변수 간의 관계를 한 번에 시각화한다.
sns.pairplot(tips, hue='sex')
plt.suptitle('여러 변수 간의 관계(pairplot)', y=1.02)
plt.show()
heatmap
- 상관계수, 교차표 등 행렬 형태 데이터를 시각화한다.
corr = tips.corr(numeric_only=True)
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('수치형 변수 상관관계(heatmap)')
plt.show()
범주형 데이터 시각화
barplot, countplot
- barplot: 범주별 평균/합계 등 요약값을 보여준다.
- countplot: 범주별 빈도를 보여준다.
# 요일별 평균 팁
sns.barplot(data=tips, x='day', y='tip', estimator='mean', ci='sd')
plt.title('요일별 평균 팁(barplot)')
plt.show()
# 요일별 방문 빈도
sns.countplot(data=tips, x='day', hue='sex')
plt.title('요일/성별 방문 빈도(countplot)')
plt.show()
다변량 분석 시각화
- 여러 변수의 복잡한 관계를 시각화할 때 사용한다.
lmplot
# lmplot: 회귀선 포함 산점도
sns.lmplot(data=tips, x='total_bill', y='tip', hue='sex', col='smoker')
plt.suptitle('총 금액과 팁의 관계(회귀선 포함, 흡연/성별)', y=1.02)
plt.show()
Seaborn 스타일/테마 설정
# 스타일 변경
sns.set_style('darkgrid')
sns.set_palette('pastel')
실전 예시: 데이터 분석 리포트용 시각화
# 전체 데이터 요약 시각화
fig, axs = plt.subplots(1, 2, figsize=(12, 5))
sns.boxplot(data=tips, x='day', y='total_bill', ax=axs[0])
axs[0].set_title('요일별 총 금액(Boxplot)')
sns.barplot(data=tips, x='day', y='tip', ax=axs[1])
axs[1].set_title('요일별 평균 팁(Barplot)')
plt.tight_layout()
plt.show()
요약
- Seaborn은 통계적 데이터 시각화에 특화된 Python 라이브러리다.
- 분포, 관계, 범주형, 다변량 등 다양한 차트를 쉽게 그릴 수 있다.
- 스타일, 색상, 테마 등 커스터마이징이 쉽다.
- 실전 데이터 분석 리포트에 바로 활용할 수 있다.